package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 使用对象输出流进行对象序列化操作
 *
 * 对象序列化:
 * 将一个对象转换为一组字节的过程，成为对象序列化.
 * 转换为一组字节的目的:要么用于保存，要么用于网络传输。
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        //需求:将一个Person对象写入文件person.obj
        String name = "刘桑";
        int age = 55;
        String gender = "男";
        String[] otherInfo = {"拍片儿技术一流","技术好","大家的启蒙老师"};
        Person person = new Person(name,age,gender,otherInfo);
        //文件流输出流(低级流)的作用:将字节写入到文件中
        FileOutputStream fos = new FileOutputStream("person.obj");
        //person对象-----?----->一组字节
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        /*
            void writeObject(Object obj)
            该方法是对象输出流独有的方法，作用是将给定的对象序列化为一组字节后再通过
            其连接的流将字节写出

            当前对象流是连接在文件流上的，因此将对象序列化后的字节通过其连接的文件流
            就写入到文件person.obj中了。


            注意:
            在使用对象输出流进行对象序列化时，writeObject方法要求写出的对象必须
            实现可序列化接口java.io.Serializable，否则会抛出异常:
            java.io.NotSerializableException
         */
        oos.writeObject(person);
        System.out.println("写出完毕!");
        oos.close();

    }
}
